package com.tian.service;

import com.tian.config.RedisConfig;
import com.tian.dto.UserLoginReqDto;
import com.tian.dto.UserLoginRespDto;
import com.tian.entity.UserMain;
import com.tian.enums.ResultCode;
import com.tian.mapper.UserMainMapper;
import com.tian.util.ResultMsgCodeEnum;
import com.tian.utils.CommonResult;
import com.tian.utils.RedisCacheKeyPre;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;

/**
 * @author tianwc  公众号：java后端技术全栈、面试专栏
 * @version 1.0.0
 * @date 2023年09月18日 09:23
 * 在线刷题 1200+题和1000+篇干货文章：<a href="https://woaijava.cc/">博客地址</a>
 */
@Service(version = "1.0.0")
public class UserLoginServiceImpl implements UserLoginDubboService {

    @Resource
    private UserMainMapper userMainMapper;

    @Resource
    private RedisConfig redisConfig;

    @Override
    public CommonResult<UserLoginRespDto> loginByPwd(UserLoginReqDto userLoginReqDto) {
        if (StringUtils.isEmpty(userLoginReqDto.getPhone())) {
            return CommonResult.failed(ResultMsgCodeEnum.PARAM_EMPTY_PHONE.getCode(), ResultMsgCodeEnum.PARAM_EMPTY_PHONE.getMessage());
        }
        if (StringUtils.isEmpty(userLoginReqDto.getPwd())) {
            return CommonResult.failed(ResultMsgCodeEnum.PARAM_EMPTY_PWD.getCode(), ResultMsgCodeEnum.PARAM_EMPTY_PWD.getMessage());
        }
        UserMain param = new UserMain();
        param.setPwd(userLoginReqDto.getPwd());
        param.setPhone(userLoginReqDto.getPhone());
        UserMain userMain = userMainMapper.loginByPwd(param);
        if (userMain == null) {
            return CommonResult.failed(ResultMsgCodeEnum.PARAM_EMPTY.getCode(), "手机号或密码为空");
        }
        UserLoginRespDto userLoginRespDto = new UserLoginRespDto();
        userLoginRespDto.setId(userMain.getId());
        userLoginRespDto.setPhone(userMain.getPhone());
        return CommonResult.success(userLoginRespDto);
    }

    @Override
    public CommonResult<UserLoginRespDto> loginByCode(UserLoginReqDto userLoginReqDto) {
        if (StringUtils.isEmpty(userLoginReqDto.getPhone())) {
            return CommonResult.failed(ResultMsgCodeEnum.PARAM_EMPTY_PHONE.getCode(), ResultMsgCodeEnum.PARAM_EMPTY_PHONE.getMessage());
        }
        if (StringUtils.isEmpty(userLoginReqDto.getCode())) {
            return CommonResult.failed(ResultMsgCodeEnum.PARAM_EMPTY_CODE.getCode(), ResultMsgCodeEnum.PARAM_EMPTY_CODE.getMessage());
        }

        String value = redisConfig.get(RedisCacheKeyPre.LOGIN_CODE_PRE + userLoginReqDto.getPhone());
        //验证码校验
        if (userLoginReqDto.getCode().equals(value)) {
            UserMain userMain = userMainMapper.loginByCode(userLoginReqDto.getPhone());
            if (userMain == null) {
                return CommonResult.failed(ResultMsgCodeEnum.PARAM_ERROR_PHONE.getCode(), ResultMsgCodeEnum.PARAM_ERROR_PHONE.getMessage());
            }
            UserLoginRespDto userLoginRespDto = new UserLoginRespDto();
            userLoginRespDto.setId(userMain.getId());
            userLoginRespDto.setPhone(userMain.getPhone());
            return CommonResult.success(userLoginRespDto);
        }
        return CommonResult.failed(ResultMsgCodeEnum.PARAM_ERROR_CODE.getCode(), ResultMsgCodeEnum.PARAM_ERROR_CODE.getMessage());
    }
}
